Estructuras de control
Las estructuras de control permiten dirigir el flujo de ejecución. En Go, la sintaxis es limpia: no se usan paréntesis en las condiciones, pero las llaves { } son obligatorias.
1. Condicionales (Toma de Decisiones)
A. Sentencia if / else
Go permite una sintaxis especial llamada "if con sentencia corta", donde declaras una variable que solo existe dentro del bloque del if.
// Sintaxis estándar
if edad >= 18 {
fmt.Println("Mayor de edad")
} else {
fmt.Println("Menor de edad")
}
// Sentencia corta (Muy usada en manejo de errores)
if valor := calcular(); valor > 100 {
fmt.Println("Valor alto:", valor)
}
// 'valor' no existe aquí afuera, liberando memoria automáticamente
B. El potente switch
En Go, el switch es más flexible que en Java. No necesitas break (es automático) y puedes evaluar condiciones.
// Switch con valor fijo
dia := "Lunes"
switch dia {
case "Lunes", "Martes", "Miercoles":
fmt.Println("Día de trabajo")
case "Sabado", "Domingo":
fmt.Println("Descanso")
default:
fmt.Println("Día no válido")
}
// Switch sin condición (funciona como un if/else largo más limpio)
numero := 15
switch {
case numero < 0:
fmt.Println("Negativo")
case numero > 0 && numero < 100:
fmt.Println("Positivo pequeño")
default:
fmt.Println("Número grande")
}
2. Bucles e Iteración (El Bucle Único)
En Go solo existe el for. No hay while ni do-while, pero el for se adapta para cumplir esas funciones.
A. For clásico (Tres componentes)
for i := 0; i < 5; i++ {
fmt.Println("Iteración:", i)
}
B. For como "While" (Solo condición)
contador := 0
for contador < 5 {
fmt.Println(contador)
contador++
}
C. Bucle Infinito
Ideal para servidores que deben estar siempre escuchando peticiones.
for {
// Código que corre por siempre
if detener {
break // Única forma de salir
}
}
D. For Range (Iterar colecciones)
Es la forma de oro para recorrer Slices y Maps.
nombres := []string{"Miguel", "Ana", "Jose"}
// Retorna índice y valor
for i, nombre := range nombres {
fmt.Printf("%d - %s\n", i, nombre)
}
// Si no necesitas el índice, usa el blank identifier (_)
for _, nombre := range nombres {
fmt.Println(nombre)
}
💡 Tips de Estilo Go
-
Evita el "Else" innecesario: Si un
iftermina en unreturn, no pongas unelse. Mantén el código "plano" hacia la izquierda. -
Switch sobre If: Si tienes más de 3 condiciones sobre la misma variable, usa un
switch; es mucho más legible.